//
// Created by PC on 2024/7/2.
// GESP 2024.06 五级 编程第一题
// 这道题的简单版本见 202406 gesp四级题
// OJ:https://www.luogu.com.cn/problem/P10719 PASS
// 用讲解视频的方法, 二维前缀和(非官方解法)
// 讲解:【GESP2024年6月五级真题解析】51'20'' https://www.bilibili
// .com/video/BV12E421A7gx/?share_source=copy_web&vd_source=039990b6433b5af9bd2905234cc47ac6
/*
 * 试题名称：黑白格
时间限制：1.0 s
内存限制：512.0 MB
3.1.1 题面描述
小杨有一个n行m列的网格图，其中每个格子要么是白色，要么是黑色。
小杨想知道至少包含k个黑色格子的最小子矩形包含了多少个格子。
3.1.2 输入格式
第一行包含三个正整数 nmk，含义如题面所示。
之后n行，每行一个长度为m的01串，代表网格图第i行格子的颜色，如果为0，则对应格子为白色，否则为黑
色。
3.1.3 输出格式
输出一个整数，代表至少包含k个黑色格子的最小子矩形包含格子的数量，如果不存在则输出0。
3.1.4 样例1
 4 5 5
 00000
 01111
 00011
 00011
 output: 6
3.1.5 样例解释
对于样例1，假设 (i,j ) 代表第i行第j列，至少包含5个黑色格子的最小子矩形的四个顶点为
 (2,4 )，(2,5 )，(4,4 )，(4,5 )，共包含6 个格子。
3.1.6 数据范围
 20% n,m<=10
 40% n=1,1<=m<=100
 40% n,m<=100
对于全部数据，保证有 1<=n,m<=100,1<=k<=n*m。
input:
1
15
6
011101111110000
output:
6

input:
10 10 99
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111
1111111111

output:
 100
 * */

#include <iostream>
#include <vector>

using namespace std;


int main()
{
    int netmap[101][101] = {0};
    int psum[101][101] = {0};
    // n:行数(从1开始) m:列数(从1开始) k至少包含黑格子的数
    int n = 1, m = 15, k = 6;
    cin >> n >> m >> k;
    // 获取矩阵数据并保存前缀和
    for (int i = 1; i <= n; ++i)
    {
        for (int j = 1; j <= m; ++j)
        {
            char t;
            cin >> t;
            if (t == '0')
                netmap[i][j] = 0;
            else
                netmap[i][j] = 1;
            psum[i][j] = psum[i - 1][j] + psum[i][j - 1] - psum[i - 1][j - 1] + netmap[i][j];
        }

    }
    int ret = 1e9;
    // 遍历前缀和数组
    // 矩阵左上角
    for (int i = 1; i <= n; ++i)
    {
        for (int j = 1; j <= m; ++j)
        {
            // 矩阵右下角
            for (int ii = 1; ii <= n; ++ii)
            {
                // int jj = k/ii; 的原因是如果ii*jj<k的话, 这个矩阵和不可能超过k
                // 没必要让jj从1开始算
                // 经测试, 能降低一半到十分之一的用时
                for (int jj = k/ii; jj <= m ; ++jj)
                {
                    // 计算当前区域总数值
                    int t = psum[ii][jj] - psum[i - 1][jj] - psum[ii][j - 1] + psum[i - 1][j - 1];
                    int count = (ii-i+1)*(jj-j+1);
                    if (t >= k)
                        ret = min(ret, count);
                }
            }
        }
    }
    if (ret == 1e9)
        cout << 0;
    else
        cout << ret;
    return 0;
}
